/**
 * Universidade Federal de Campina Grande - UFCG
 * Departamento de Sistemas e Computação - DSC
 * Disciplina: Compiladores
 * Professor: Marcus Salerno
 * 
 * Projeto da Disciplina - Analisador Lexico
 * 
 *  
 * Contributors:
 * Arthur
 * Carolina
 * Saulo
 * 
 */
package lexico;

import util.Simbolo;
import erro.ErroLexico;
import erro.ErroTipoInvalido;

public abstract class ASimbolo implements Simbolo {

	/**
	 * String representation of symbol.
	 */
	private String simbolo;
	
	/**
	 * The symbol code (used on symbol table).
	 */
	private int codigo;
		
	private int linha;
	
	private boolean ehSimboloFalso;
	
	private boolean inicializacao;

	private String endereco;

	/**
	 * Constructor.
	 * 
	 * @param code 
	 * @param symbol
	 */
	public ASimbolo(int codigo, String simbolo, int linha) {
		this.simbolo = simbolo;
		this.codigo = codigo;		
		this.linha = linha;
		this.ehSimboloFalso = false;
	}
	
	public boolean verificaRegras() throws ErroLexico {
		return true;
	}

	public String getSimbolo() {
		return simbolo;
	}
	
	public void setSimbolo(String simbolo) {
		this.simbolo = simbolo;
	}
	
	public int getCodigo() {
		return codigo;
	}
	
	public int getLinha() {
		return linha;
	}		
	
	public void setFalso(boolean boo) {
		this.ehSimboloFalso = boo;
	}
	
	public boolean ehFalso(){
		return this.ehSimboloFalso;
	}
	
	public void setInicializacao(boolean initialized) {
		this.inicializacao = initialized;
	}
	
	public boolean getInicializacao() {
		return this.inicializacao;
	}
	
	public String getEndereco() {
		return this.endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	
	public String toString() {
		return this.simbolo;
	}
	
	// metodos abstratos
	public abstract String getTipo();
	
	public abstract void setTipo(String type) throws ErroTipoInvalido;
	
}